﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DTO.Clases;
using DataAccessLayer.Clases;
using System.Data;

namespace BussinesLayer.Clases
{
    public class BussinesFormaPago
    {
        private DaoFormaPago miDaoFromaPago = new DaoFormaPago();

        /// <summary>
        /// inserta forma pago
        /// </summary>
        /// <param name="formaPago"></param>
        public void InsertarFormaPago(FormaPago formaPago)
        {
            miDaoFromaPago.InsertarFormaPago(formaPago);
        }

        /// <summary>
        /// lista forma pago
        /// </summary>
        /// <returns></returns>
        public DataTable listarformapago()
        {
            return miDaoFromaPago.ListaFormaPago();

        }

        /// <summary>
        /// Modifica forma de pago
        /// </summary>
        /// <param name="formapago"></param>
        public void ModificarformaPago(FormaPago formapago)
        {
            miDaoFromaPago.ModificaFormaPago(formapago);
        }

        /// <summary>
        /// Elimina forma de pago
        /// </summary>
        /// <param name="formapago"></param>
        public void EliminaFormaPago(int id)
        {
            miDaoFromaPago.EliminaFormaPago(id);
        }

        /// <summary>
        /// Existe forma de pago
        /// </summary>
        /// <param name="nombre"></param>
        /// <returns></returns>
        public bool ExisteFormaPago(string nombre)
        {
            return miDaoFromaPago.ExisteFormaPago(nombre);
        }

        public void IngresarPagoAFactura(FormaPago pago, bool venta)
        {
            miDaoFromaPago.IngresarPagoAFactura(pago, venta);
        }

        /// <summary>
        /// Ingresa los datos del pago o abono realizado a un proveedor.
        /// </summary>
        /// <param name="pago">Pago a realizar.</param>
        public void IngresaPagoAProveedor(FormaPago pago)
        {
            miDaoFromaPago.IngresaPagoAProveedor(pago);
        }

        /// <summary>
        /// Obtiene el listado de las formas de pago de una Factura de Venta.
        /// </summary>
        /// <param name="numero">Número de la factura de venta.</param>
        /// <returns></returns>
        public DataTable FormasDePagoDeFacturaVenta(string numero)
        {
            return miDaoFromaPago.FormasDePagoDeFacturaVenta(numero);
        }

        /// <summary>
        /// Obtiene el valor total de los pagos a una Factura de Venta.
        /// </summary>
        /// <param name="numero">Número de la factura de venta.</param>
        /// <returns></returns>
        public int GetTotalFormasDePagoDeFacturaVenta(string numero)
        {
            var tabla = miDaoFromaPago.FormasDePagoDeFacturaVenta(numero);
            var total = 0;
            foreach (DataRow row in tabla.Rows)
            {
                total = total + Convert.ToInt32(row["Valor"]);
            }
            return total;
        }

        /// <summary>
        /// Obtiene el valor total de los pagos o abono realizados a una factura de Proveedor.
        /// </summary>
        /// <param name="idFactura">Id de la factura a consultar pagos.</param>
        /// <returns></returns>
        public int PagosAProveedor(int idFactura)
        {
            var tabla = miDaoFromaPago.PagosAProveedor(idFactura);
            var total = 0;
            foreach (DataRow row in tabla.Rows)
            {
                total = total + Convert.ToInt32(row["valorpago_factura_proveedor"]);
            }
            return total;
        }
    }
}